其實Rxjava還有許多的功能用法,我覺得一定要介紹的就是它有許多觀察者模式(Observable),今天來帶大家來看看各個**觀察者模式(Observable)**的特性及差別吧。
在需要多次執行的內容時使用,每一次執行就會進入onNext(),完成時則進入onComplete()。
Observable.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.e("Tag", "Completable: 建立" );
return null;
}
}).subscribe(new Observer<Object>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Object o) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
在執行的內容不需要有回傳值,只要知道執行成功與否時使用,例如更新、刪除資料等。
Completable.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.d("Completable", "Completable: 建立" );
return null;
}
}).subscribe(new CompletableObserver() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d("Completable", "onSubscribe" );
}
@Override
public void onComplete() {
Log.d("Completable", "onComplete" );
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("Completable", "onError" );
}
});
在執行後不一定需要有回傳值時使用,例如資料庫的查詢,如果有找到需要的資料則會進入onSuccess(),若無則進入onComplete()。
Maybe.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.d("Maybe", "Maybe: 建立" );
return null;
}
}).subscribe(new MaybeObserver<Object>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d("Maybe", "onSubscribe" );
}
@Override
public void onSuccess(@NonNull Object o) {
Log.d("Maybe", "onSuccess" );
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("Maybe", "onError" );
}
@Override
public void onComplete() {
Log.d("Maybe", "onComplete" );
}
});
在執行後一定需要有回傳值時,例如API Get 資料時。此時會進入onSuccess()。
Single.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.e("Single", "Single: 建立" );
return null;
}
}).subscribe(new SingleObserver<Object>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.d("Single", "onSubscribe" );
}
@Override
public void onSuccess(@NonNull Object o) {
Log.d("Single", "onSuccess" );
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("Single", "onError" );
}
});
用法與Observable差不多,最主要差別是Flowable支持back pressure,也就是在被觀察者發送事件的速度過快以至於觀察者無法處理時,會降低被觀察者發送事件的速度,以避免錯誤的產生。
Flowable.fromCallable(new Callable<Object>() {
@Override
public Object call() throws Exception {
Log.d("Flowable", "Flowable: 建立" );
return null;
}
}).subscribe(new FlowableSubscriber<Object>() {
@Override
public void onSubscribe(@NonNull Subscription s) {
Log.d("Flowable", "onSubscribe" );
}
@Override
public void onNext(Object o) {
Log.d("Flowable", "onNext" );
}
@Override
public void onError(Throwable t) {
Log.e("Flowable", "onError" );
}
@Override
public void onComplete() {
Log.d("Flowable", "onComplete" );
}
});
可以看出以上的差別主要在callback進的時機及情況上,可以對應自己的執行需求使用對應的模式喔,善用這些模式也可以幫助程式碼變得更有效率,rxjava也就先介紹到這邊,也期待各為在熟悉這些後,可以繼續研究rxjava,發覺更多rxjava的強大。